/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package nl.hanze.FlitsNieuws.Media;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Environment;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Een helper klasse. Hierin wordt een tijdelijk bestand bepaald, de foto wordt met deze naam opgeslagen.
 * Verder een methode om de foto te schalen naar de grootte zoals deze op de site te zien zal zijn. Doordat
 * de afmetingen beperkt zijn (maximaal 450 x 350 pixels) wordt de geschaalde afbeelding zeer compact.
 * 
 * @author alex
 */
public class MediaHelper {

    private static final String JPEG_FILE_SUFFIX = ".JPG";

    /**
     * Maakt een tijdelijk bestand aan die gebruikt kan worden voor het aanmaken
     * van een bitmap van de telefooncamera.
     *
     * @param context Applicatie context
     * @param fileName file prefix
     * @return
     */
    public static File getTempFile(Context context, String fileName) {
        File file = null;
        try {
            file = File.createTempFile(fileName, JPEG_FILE_SUFFIX, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
        } catch (Exception e) {
        }
        return file;
    }

    /**
     * De afbeeldingen op de site zijn maximaal 450 x 350, de foto's worden
     * binnen dit kader geschaald
     *
     * @param f
     */
    public static void resizeBitmap(File f) {
        Bitmap bm = BitmapFactory.decodeFile(f.getAbsolutePath());
        // de maximale breedte en hoogte
        int maxWidth = 450;
        int maxHeight = 350;
        // de huidige breedte en hoogte
        int width = bm.getWidth();
        int height = bm.getHeight();
        // bepaal de deelfactor zodat het plaatje binnen het kader past
        float scale = 1.0f;
        if (width > maxWidth) {
            scale = (float) maxWidth / (float) width;
        }
        if (height > maxHeight) {
            scale = Math.min(scale, (float) maxHeight / (float) height);
        }
        // als scale nog steeds 1.0f is dan hoeft er niet geschaald te worden
        if (scale == 1.0f) {
            return;
        }
        // schaal de afbeelding
        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);
        bm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
        // overschrijf de grote afbeelding met een JPEG compressie, kwaliteit 80
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(f);
            bm.compress(Bitmap.CompressFormat.JPEG, 80, out);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
